Internet Protocol version 6 網際網路協定版本 6
| 作者 | |
|---|---|
| 進度 | 無限接近完成 |
| 週次 | 2024.06 |
IPv6是網際協定的最新版本,用作網際網路的協定。用它來取代IPv4主要是為了解決IPv4位址枯竭問題,同時它也在其他方面對於IPv4有許多改進。
IPv6的設計目的是取代IPv4,然而長期以來IPv4在網際網路流量中仍佔據主要地位,IPv6的使用增長緩慢。在2022年4月,通過IPv6使用Google服務的使用者百分率首次超過40%。
與IPv4比較
在Internet上,資料以分組的形式傳輸。IPv6定義了一種新的分組格式,目的是為了最小化路由器處理的訊息標頭。由於IPv4訊息和IPv6訊息標頭有很大不同,因此這兩種協定無法互操作。但是在大多數情況下,IPv6僅僅是對IPv4的一種保守擴展。除了嵌入了網際網路位址的那些應用協定(如FTP和NTPv3,新位址格式可能會與當前協定的語法衝突)以外,大多數傳輸層和應用層協定幾乎不怎麼需要修改就可以在IPv6上運行。
無狀態位址自動組態(SLAAC)
當連接到IPv6網路上時,IPv6主機可以使用鄰居發現協定對自身進行自動組態。當第一次連接到網路上時,主機傳送一個鏈路本地路由器請求(solicitation)多播請求來取得組態參數。路由器使用包含Internet層組態參數的路由器宣告(advertisement)報文進行回應。
在不適合使用IPv6無狀態位址自動組態的場景下,網路可以使用有狀態組態(DHCPv6),或者使用靜態方法手動組態。
IPv6編碼
IPv6具有比IPv4大得多的編碼位址空間。這是因為IPv6採用128位元的位址,而IPv4使用的是32位元。因此新增的位址空間支援2128(約3.4×1038)個位址,具體數量為340,282,366,920,938,463,463,374,607,431,768,211,456 個,也可以說成1632個,因為每4位元位址(128位元分為32段,每段4位元)可以取24=16個不同的值。
網路位址轉換是目前減緩IPv4位址耗盡最有效的方式,而IPv6的位址消除了對它的依賴,被認為足夠在可以預測的未來使用。就以地球人口70億人計算,每人平均可分得約4.86×1028(486117667×1020)個IPv6位址。
從IPv4到IPv6最顯著的變化就是網路位址的長度。RFC 2373和RFC 2374定義的IPv6位址有128位元長;IPv6位址的表達形式一般採用32個十六進制數。
在很多場合,IPv6位址由兩個邏輯部分組成:一個64位元的網路前綴和一個64位元的主機位址,主機位址通常根據實體位址自動生成,叫做EUI-64(或者64-位擴展唯一標識)。
IPv6格式
IPv6二進位制下為128位元長度,以16位元為一組,每組以冒號「:」隔開,可以分為8組,每組以4位十六進制方式表示。例如:2001:0db8:86a3:08d3:1319:8a2e:0370:7344 是一個合法的IPv6位址。類似於IPv4的點分十進位,同樣也存在點分十六進位的寫法,將8組16位元十六進位位址的冒號去除後,每位以點號「.」分組,例如:2001:0db8:85a3:08d3:1319:8a2e:0370:7344則記為2.0.0.1.0.d.b.8.8.5.a.3.0.8.d.3.1.3.1.9.8.a.2.e.0.3.7.0.7.3.4.4,其倒序寫法用於ip6.arpa子域名記錄IPv6位址與域名的對映。
同時IPv6在某些條件下可以省略:
- 每項數字前導的0可以省略,省略後前導數字仍是0則繼續,例如下組IPv6是等價的。
2001:0db8:02de:0000:0000:0000:0000:0e132001:db8:2de:0000:0000:0000:0000:e132001:db8:2de:000:000:000:000:e132001:db8:2de:00:00:00:00:e132001:db8:2de:0:0:0:0:e13
- 可以用雙冒號「::」表示一組0或多組連續的0,但只能出現一次:
- 如果四組數字都是零,可以被省略。遵照以上省略規則,下面這兩組IPv6都是相等的。
- 2001:db8:2de:0:0:0:0:e13
2001:db8:2de::e13
- 2001:0db8:0000:0000:0000:0000:1428:57ab
2001:0db8:0000:0000:0000::1428:57ab2001:0db8:0:0:0:0:1428:57ab2001:0db8:0::0:1428:57ab2001:0db8::1428:57ab
- 2001::25de::cade 是非法的,因為雙冒號出現了兩次。它有可能是下種情形之一,造成無法推斷。
- 2001:0000:0000:0000:0000:25de:0000:cade
- 2001:0000:0000:0000:25de:0000:0000:cade
- 2001:0000:0000:25de:0000:0000:0000:cade
- 2001:0000:25de:0000:0000:0000:0000:cade
- 如果這個位址實際上是IPv4的位址,後32位元可以用10進制數表示;因此::ffff:192.168.89.9 相等於::ffff:c0a8:5909。
- 如果四組數字都是零,可以被省略。遵照以上省略規則,下面這兩組IPv6都是相等的。
另外,::ffff:1.2.3.4 格式叫做IPv4對映位址。
IPv4位元址可以很容易的轉化為IPv6格式。舉例來說,如果IPv4的一個位址為135.75.43.52(十六進位為0x874B2B34),它可以被轉化為0000:0000:0000:0000:0000:FFFF:874B:2B34 或者::FFFF:874B:2B34。同時,還可以使用混合符號(IPv4-compatible address),則位址可以為::ffff:135.75.43.52。
由於同一非全域位址可能在同一範圍的多個區域中使用(例如,在兩條獨立的物理鏈路中使用鏈路本地位址 fe80::1),而且一個節點可能連接到同一範圍的不同區域的介面(例如,一個路由器通常有多個介面連接到不同的鏈路)。IPv6新增了區域ID(Zone ID)加以區分,或稱作用域ID(Scope ID)。作用域ID僅用於本地連結,使用百分號追加在位址後面。其內容特定於作業系統,例如Windows使用數字 fe80::2%3 ,Linux使用網卡名字 fe80::2%eth0 。在URI中使用時,百分號需要進行編碼,例如 fe80::a%en1 應顯示為 http://[fe80::a%25en1] 。
IPv6位址的分類
IPv6位址可分為三種
單播(unicast)位址
單播位址標示一個網路介面。協定會把送往位址的封包送往給其介面。IPv6的單播位址可以有一個代表特殊位址名字的範疇,如鏈路本地位址(link local address)和唯一區域位址(ULA,unique local address)。單播位址包括可聚類的全球單播位址、鏈路本地位址等。
任播(anycast)位址
任播像是Unicast(單點傳播)與Broadcast(多點廣播)的綜合。單點廣播在來源和目的地間直接進行通訊;多點廣播存在於單一來源和多個目的地進行通訊。
而Anycast則在以上兩者之間,它像多點廣播(Broadcast)一樣,會有一組接收節點的位址列表,但指定為Anycast的封包,只會傳送給距離最近或傳送成本最低(根據路由表來判斷)的其中一個接收位址,當該接收位址收到封包並進行回應,且加入後續的傳輸。該接收列表的其他節點,會知道某個節點位址已經回應了,它們就不再加入後續的傳輸作業。
以目前的應用為例,Anycast位址只能分配給中間裝置(如路由器、三層交換機等),不能分配給終端裝置(手機、電腦等),而且不能作為傳送端的位址。
多播(multicast)位址
多播位址也稱組播位址。多播位址也被指定到一群不同的介面,送到多播位址的封包會被傳送到所有的位址。多播位址由皆為一的位元組起始,亦即:它們的前置為FF00::/8。其第二個位元組的最後四個位元用以標明"範疇"。
一般有node-local(0x1)、link-local(0x2)、site-local(0x5)、organization-local(0x8)和global(0xE)。多播位址中的最低112位元會組成多播群組識別碼,不過因為傳統方法是從MAC位址產生,故只有群組識別碼中的最低32位元有使用。定義過的群組識別碼有用於所有節點的多播位址0x1和用於所有路由器的0x2。
另一個多播群組的位址為"solicited-node多播位址",是由前置FF02::1:FF00:0/104和剩餘的群組識別碼(最低24位元)所組成。這些位址允許經由鄰居發現協定(NDP,Neighbor Discovery Protocol)來解譯連結層位址,因而不用干擾到在區網內的所有節點。